package com.huitu.whht.base.core.api.rel.irr.service.impl;

import com.huitu.annotation.BusinessService;
import com.huitu.api.UUIDFactory;
import com.huitu.whht.api.core.common.annotations.SzyCoreApiDao;
import com.huitu.whht.api.core.common.annotations.SzyCoreApiService;
import com.huitu.whht.base.core.api.rel.irr.dao.RelIrrWiustDao;
import com.huitu.whht.base.core.api.rel.irr.entities.RelIrrWiust;

import com.huitu.whht.base.core.api.rel.irr.entities.RelIrrWiustQo;
import com.huitu.whht.base.core.api.rel.irr.service.IRelIrrWiustService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 说明: 灌区与取用水测站关系表Service接口默认实现,表名称: REL_IRR_WIUST <br/>
 * 日期: 2019-04-11
 * @author LiuCW
 */
@Service
@SzyCoreApiService
@BusinessService
public class RelIrrWiustServiceImpl implements IRelIrrWiustService {

    @Autowired
    @SzyCoreApiDao
    private RelIrrWiustDao relIrrWiustDao;

    /**
     * 根据主键查询
     * @param wiustCd 取用水测站代码
     * @return 查询结果Map
     */
    @Override
    public Map<String, Object> selectByPrimaryKey(String wiustCd) {
        return relIrrWiustDao.selectByPrimaryKey(wiustCd);
    }

    /**
     * 根据条件查询
     * @param filter 查询条件
     * @return 查询结果List
     */
    @Override
    public List<Map<String, Object>> selectList(RelIrrWiustQo filter) {
        return relIrrWiustDao.selectList(filter);
    }

    /**
     * 新增(null字段会被忽略).
     * 主键值会回填至record对象中
     * @param record 要新增的数据.
     * @return 成功新增的条数.1:新增成功;0:新增失败.
     */
    @Transactional
    @Override
    public Integer insertSelective(RelIrrWiust record) {
        record.setWiustCd(UUIDFactory.createUUID());
        record.setTs(LocalDateTime.now());
        //TODO 在mapper中或service中设置主键,并对record对象中主键字段进行回填
        return relIrrWiustDao.insertSelective(record);
    }

    /**
     * 批量新增(null字段会被忽略).
     * 主键值会回填至record对象中
     * @param recordList 要新增的数据(类型数组).
     * @return 成功新增的条数.1:新增成功;0:新增失败.
     */
    @Transactional
    @Override
    public Integer insertBatch(List<RelIrrWiust> recordList) {
        for (int i = 0; i < recordList.size(); i++) {
            recordList.get(i).setWiustCd(UUIDFactory.createUUID());
            recordList.get(i).setTs(LocalDateTime.now());
        }
        //TODO 在mapper中或service中设置主键,并对record对象中主键字段进行回填
        return relIrrWiustDao.insertBatch(recordList);
    }

    /**
     * 根据主键按需修改(null字段会被忽略)
     * @param record 要修改的数据
     * @return 成功修改的条数.1:修改成功;0:要修改的数据不存在(可能已被删除)
     */
    @Transactional
    @Override
    public Integer updateByPrimaryKeySelective(RelIrrWiust record) {
        record.setTs(LocalDateTime.now());
        return relIrrWiustDao.updateByPrimaryKeySelective(record);
    }

    /**
     * 根据主键修改
     * @param record 要修改的数据
     * @return 成功修改的条数.1:修改成功;0:要修改的数据不存在(可能已被删除)
     */
    @Transactional
    @Override
    public Integer updateByPrimaryKey(RelIrrWiust record) {
        record.setTs(LocalDateTime.now());
        return relIrrWiustDao.updateByPrimaryKey(record);
    }


    /**
     * 根据主键批量修改
     * @param recordList 要修改的数据
     * @return 成功修改的条数.1:修改成功;0:要修改的数据不存在(可能已被删除)
     */
    @Transactional
    @Override
    public Integer updateBatch(List<RelIrrWiust> recordList) {
        return relIrrWiustDao.updateBatch(recordList);
    }

    /**
     * 根据主键删除
     * @param wiustCd 取用水测站代码
     * @return 成功修改的条数.1:修改成功;0:要删除的数据不存在(可能已被删除)
     */
    @Transactional
    @Override
    public Integer deleteByPrimaryKey(String wiustCd) {
        return relIrrWiustDao.deleteByPrimaryKey(wiustCd);
    }

    /**
     * 根据条件删除
     * @param filter 查询条件,符合条件的数据将被删除
     * @return 成功修改的条数.通常1或者>1:删除成功;0:没有符合条件的数据
     */
    @Transactional
    @Override
    public Integer deleteByFilter(RelIrrWiustQo filter){
        return relIrrWiustDao.deleteByFilter(filter);
    }
}
